lexer grammar Analexc;

options {
  k = 10;
   //charVocabulary = ('\3'..'\377') ;
}


//tokens {
//  // tipos
//  INT = 'int' ;
//  CHAR = 'char' ;
//  // instrucciones
//  IF = 'if' ;
//  WHILE = 'while' ;
//  VOID = 'void';
//  LIT_REAL;
//  LIT_ENTERO;
//}


@lexer::header {
   package analexc;
}

//class Analexc extends Lexer;
//// ... Zona de opciones
//options {
//	k = 2;
//	//testLiterals=false; //Para que haga caso a los iterales de tokens
//	charVocabulary='\3'..'\377';
//	caseSensitiveLiterals=false; //Ejercicio 8 de la practica 4
//	
//}

// ... Zona de reglas

fragment
NUEVA_LINEA: ('\r'? '\n') ; // {newline();};
	
fragment
LETRA: ('A'..'Z')|('a'..'z');
	
fragment
DIGITO: '0'..'9';
	
fragment
COMILLAS : '"';

  // tipos
INT : 'int' ;

CHAR : 'char' ;
  // instrucciones
IF : 'if' ;

WHILE : 'while' ;

VOID : 'void';
	
COMENTARIO : '/*' (options {greedy=false;}:.)* '*/' {$channel=HIDDEN;} ;

COMENTARIO_LINEA : '//' (options {greedy=false;}:.)* NUEVA_LINEA ;

COMPAR : '<' | '>' | '!=' | '==';

BLANCO: (' '|'\t'|NUEVA_LINEA) {$channel=HIDDEN;} ;

NUMERO: (DIGITO)+('.'(DIGITO)+)?;

IDENT : LETRA(LETRA|DIGITO)*;

OPERADOR: '+'|'-'|'/'|'*';

PAROP: '(';

PARCL: ')';

LLAVOP: '{';

LLAVCL: '}';

SEPARADOR: ';';

COMA : ',';

IGUAL : '=';

PERCENT : '%';

AND : '&';

CADENA : COMILLAS (options {greedy=false;}:.)* COMILLAS;
